
/**
 * @since 14/11/12
 * 
 * @author Regis Rocha
 * 
 * @description funcao carregada ao iniciar Document Object Model da pagina de
 *              login.
 */ 
$(document).ready(function(){
	
	// configuracao do modal de criacao de conta.
	configModalCreateUser();
	
	// Click do botao criar conta
	$("#btnCriarConta").click(function(){ 
		openModalCreateUser();
	}); 
	
	// Change do campo username
	$("#email").change(function(){
		var email = $("#email").val();
		if(email !=  null && email != undefined && email != ''){
			verificarDisponibilidade();
		}
	});
	
	// Click do link para esqueceu senha.
	$("#linkEsqueceuSenhaID").click(function(){
		openModalEsqueceuSenha();
	});
	
});

/**
 * @since 14/11/12
 * 
 * @author regisrocha
 * 
 * @description Script para adicionar configuracoes de propriedades do modal de
 *              criacao de conta.
 */
function configModalCreateUser(){
	$.fx.speeds._default = 400;
	$( "#divCreateUserID" ).dialog({
		autoOpen: false,
        height: 450,
        width: 600,
        modal: true,
        show: 'fade',
        hide: 'explode',
        open: function() {
        	hideCheckImage();        	
        },
        close: function() {
        	clearModalCreateUser();
        },
        buttons: {
            Criar: function() {
            	criarUsuario();
            },
            Cancelar: function() {
                $( this ).dialog( "close" );
            }
        }
	});
}

/**
 * @since 14/11/12
 * 
 * @author regisrocha
 * 
 * @description Script para abrir modal de criacao de conta.
 */
function openModalCreateUser(){
	$( "#divCreateUserID" ).dialog( "open" );
}

/**
 * @since 14/11/12
 * 
 * @author regisrocha
 * 
 * @description Script para fechar modal de criacao de conta.
 */
function closeModalCreateAccount(){
	$( "#divCreateUserID" ).dialog( "close" );
}

/**
 * @since 14/11/12
 * 
 * @author regisrocha
 * 
 * @description Script para criar conta.
 * 
 */
function criarUsuario(){
	
	var params = $("#username").val() + "/" + $("#password").val() + "/" + $("#confirPassword").val() + "/" + $("#email").val() + "/" + $("#lastName").val();
	
	// valida os dados do novo usuario. Se os dados estarem OK um valor boolean true sera retornado.
	var valido = validarCriacaoUsuario();
	
	if(valido == true){
		$.ajax({
		      type: 'post',
		      cache: false,
		      async: false,
		      dataType: 'json',
		      contentType: 'application/json',
		      url:$("#appContext").val()+'/rest/user/create/'+params,
		      success: function(json){
		    	  var msgs = "";
		    	  var msgError = false;
		    	  
		    	  for (var i in json.message) {
		    		  if (json.message[i].messageInformation != null && json.message[i].messageInformation != undefined && json.message[i].messageInformation != '') {
		    			  msgs +="<ul>";
		    			  msgs += "<li id='idMsg'>"+json.message[i].messageInformation+"</li>";
		    			  msgs +="</ul>";	
		    			  
		    			  if(json.message[i].error == true){
		    				  msgError = true;
		    			  }
		    		  }
		          }
		    	  
		    	  openModalMessage();
		    	  $("#divMessageUserID #msgUserID").html(msgs);
		    	  
		    	  if(msgError){
		    		  closeModalCreateAccount();
		    	  }
		      },
		      error: function(jqXHR, textStatus, errorThrown){
		    	  alert("Error: " + errorThrown + " " +textStatus);
		      }
		 });
	}
}

/**
 * @since 14/11/12
 * 
 * @author regisrocha
 * 
 * @description Script para abrir modal de mensagem.
 * 
 */
function openModalMessage(){
	$( "#divMessageUserID" ).dialog({
        modal: true,
        width: 400,
        close: function(){
        	$("#divMessageUserID #msgUserID").html("");
        },
        buttons: {
            Ok: function() {
                $( this ).dialog( "close" );
            }
        }
    });
}

/**
 * @since 11/01/13
 * 
 * @author regisrocha
 * 
 * @description Script para verificar se o nome de usuario ja existe.
 */
function verificarDisponibilidade(){
	var params = $("#email").val();
	
	$.ajax({
	      type: 'GET',
	      cache: false,
	      async: false,
	      dataType: 'json',
	      url:$("#appContext").val()+'/rest/user/verificarDisponibilidade/'+params,
	      success: function(exist){
	    	  if(exist != null && exist != undefined && (exist.error == true || exist.error == 'true')){
	    		  setVisibleElement(true);
	    		  $("#msgUserID").html(exist.messageInformation);
	    		  openModalMessage();
	    	  } else {
	    		  setVisibleElement(false);
	    	  }
	      },
	      error: function(jqXHR, textStatus, errorThrown){
	    	  alert("Error: " + errorThrown + " " +textStatus);
	      }
	 });
}

/**
 * @author regisrocha
 * 
 * @since 13/01/13
 * 
 * @description Exibe ou esconde o elemento informado por argumento.
 */
function setVisibleElement(visible){
	
	if(visible != null && visible == true){
		$("#imgCheckNoSucessUsername").show();
		$("#imgCheckNoSucessUsername").css("visibility", "visible");
		
		$("#imgCheckSucessUsername").hide();
		$("#imgCheckSucessUsername").css("visibility", "hidden");
	} else {
		$("#imgCheckSucessUsername").show();
		$("#imgCheckSucessUsername").css("visibility", "visible");
		
		$("#imgCheckNoSucessUsername").hide();
		$("#imgCheckNoSucessUsername").css("visibility", "hidden");
	}
}

/**
 * @author regisrocha
 * 
 * @since 18/02/13
 * 
 * @description Esconde a imagem do check de validacao de nome de ususario.
 */
function hideCheckImage(){
	$("#imgCheckSucessUsername").hide();
	$("#imgCheckSucessUsername").css("visibility", "hidden");
	
	$("#imgCheckNoSucessUsername").hide();
	$("#imgCheckNoSucessUsername").css("visibility", "hidden");
}

/**
 * @author regisrocha
 * 
 * @since 19/02/13
 * 
 * @description Funcao que ira realizar todas as validacoes de script para que o usuario seja criado.
 */
function validarCriacaoUsuario(){
	var valido = true;
	
	valido = validarDadosIsNull();
	
	return valido;
}

/**
 * @author regisrocha
 * 
 * @since 19/02/13
 * 
 * @description Verifica se os dados de usuario, senha e confirmacao de senha sao nulos ou vazios.
 */
function validarDadosIsNull(){
	var isValid = true;
	
	var email = $("#email").val();
	var lastName = $("#lastName").val();
	var username = $("#username").val();
	var password = $("#password").val();
	var confirmPassword = $("#confirPassword").val();
	
	if(username ==  null || username == undefined || username == ''){
		isValid = false;
		marcarCampoComoObrigatorio('username');
		exibirMensagemCampoObrigatorio();
	} else if(lastName == null || lastName == undefined || lastName == ''){
		isValid = false;
		marcarCampoComoObrigatorio('lastName');
		exibirMensagemCampoObrigatorio();
		desMarcarCampoComoObrigatorio('username');
	} else if(email == null || email == undefined || email == ''){
		isValid = false;
		marcarCampoComoObrigatorio('email');
		exibirMensagemCampoObrigatorio();
		desMarcarCampoComoObrigatorio('username');
		desMarcarCampoComoObrigatorio('lastName');
	} else if(password ==  null || password == undefined || password == ''){
		isValid = false;
		marcarCampoComoObrigatorio('password');
		exibirMensagemCampoObrigatorio();
		desMarcarCampoComoObrigatorio('username');
		desMarcarCampoComoObrigatorio('lastName');
		desMarcarCampoComoObrigatorio('email');
	} else if(confirmPassword ==  null || confirmPassword == undefined || confirmPassword == ''){
		isValid = false;
		marcarCampoComoObrigatorio('confirPassword');
		desMarcarCampoComoObrigatorio('password');
		desMarcarCampoComoObrigatorio('username');
		desMarcarCampoComoObrigatorio('lastName');
		desMarcarCampoComoObrigatorio('email');
		exibirMensagemCampoObrigatorio();
	} else {
		inibirMensagemCampoObrigatorio();
		desMarcarCampoComoObrigatorio('username');
		desMarcarCampoComoObrigatorio('lastName');
		desMarcarCampoComoObrigatorio('email');
		desMarcarCampoComoObrigatorio('password');
		desMarcarCampoComoObrigatorio('confirPassword');
	}
	
	return isValid;
}

/**
 * @author regisrocha
 * 
 * @since 19/02/13
 * 
 * @description Marca o campo como obrigatorio, para identifcar que o mesmo deve ser preenchido.
 */
function marcarCampoComoObrigatorio(nomeCampo){
	$("#"+nomeCampo).css("border-color", "#FF0000");
}

/**
 * @author regisrocha
 * 
 * @since 19/02/13
 * 
 * @description desmarcar o campo como obrigatorio, para identifcar que o mesmo deve ser preenchido.
 */
function desMarcarCampoComoObrigatorio(nomeCampo){
	$("#"+nomeCampo).css("border-color", "#DDDDDD");
}


/**
 * @author regisrocha
 * 
 * @since 20/02/13
 * 
 * @description limpa o modal para criacao de usuario.
 */
function clearModalCreateUser(){
	$( "#username").val("");
	$( "#password").val("");
	$( "#confirPassword").val("");
	$( "#email").val("");
	$( "#lastName").val("");
	
	desMarcarCampoComoObrigatorio('username');
	desMarcarCampoComoObrigatorio('password');
	desMarcarCampoComoObrigatorio('confirPassword');
	desMarcarCampoComoObrigatorio('lastName');
	desMarcarCampoComoObrigatorio('email');
	
	inibirMensagemCampoObrigatorio();
}

/**
 * @author regisrocha
 * 
 * @since 27/02/13
 * 
 * @description Exibe mensagem indicando que determinado campo deve ser preenchido.
 */
function exibirMensagemCampoObrigatorio(){
	$("#divCreateUserID #divValidationUserID").show("slow");
}

/**
 * @author regisrocha
 * 
 * @since 27/02/13
 * 
 * @description Inibe mensagem indicando que determinado campo deve ser preenchido.
 */
function inibirMensagemCampoObrigatorio(){
	$("#divCreateUserID #divValidationUserID").hide("slow");
}

/**
 * @author regisrocha
 * 
 * @since 28/02/13
 * 
 * @description Abre model para recuperar senha.
 */
function openModalEsqueceuSenha(){
	$( "#divEsqueceuSenhaID" ).dialog({
        modal: true,
        width: 600,
        close: function(){
        	$("#divEsqueceuSenhaID #textUsernameID").html("");
        	$("#divEsqueceuSenhaID #msgEsqueceuSenhaID").html("");
        },
        buttons: {
            Ok: function() {
                alert("Enviar e-mail");
            },
            Cancelar: function() {
                $( this ).dialog( "close" );
            }
        }
    });
}